6  SIR9900 in VEXAS Syndrome

SIVEX Study Design Report — A Randomized, Double-Blind, Placebo-Controlled Phase II Study

Author
Affiliation

Ashwin Kishtagari, MD

Division of Hematology & Oncology, Vanderbilt University Medical Center

Published

August 19, 2026

Executive Summary

SIR9900-GLB-202 (SIVEX) is a multi-center, randomized, double-blind, placebo-controlled Phase II study evaluating the efficacy and safety of SIR9900, a potent and selective RIPK1 inhibitor, in patients with genetically confirmed VEXAS syndrome. The study employs a two-part adaptive design: Part A (dose-ranging, N=18–30) followed by Part B (efficacy confirmation, N=80), enrolling approximately 110 participants across ~40 global sites. The primary endpoint is overall clinical response (OCR) at Week 24.

This report provides a comprehensive analysis of the SIVEX study design, including statistical power considerations, pharmacological rationale, safety margins, and competitive positioning within the VEXAS treatment landscape. All figures are generated programmatically using R (ggplot2 ecosystem) and Python (matplotlib/seaborn) for full reproducibility.


7 VEXAS Syndrome: Disease Background

7.1 Pathogenesis & Epidemiology

VEXAS (Vacuoles, E1 enzyme, X-linked, Autoinflammatory, Somatic) syndrome is a recently identified adult-onset autoinflammatory disorder first described in 2020 by Beck et al. (NEJM). It is caused by somatic mutations in the UBA1 gene — encoding the E1 ubiquitin-activating enzyme — arising in hematopoietic stem cells. The canonical mutations reside at codon 41 (p.Met41Thr, p.Met41Val, p.Met41Leu) or neighboring splice sites (c.118-1, c.118-2).

Key epidemiological data:

VEXAS Syndrome Epidemiology
Parameter Value Source
Prevalence in men aged 50+ ~1 in 4,269 Beck et al. JAMA 2023
Prevalence in women aged 50+ ~1 in 26,238 Beck et al. JAMA 2023
Estimated US cases (age 50+) ~15,000 (~13,200 men) NYU Langone 2023
5-year survival rate ~63% Georgin-Lavialle et al. 2022

7.2 Clinical Manifestations

The disease bridges rheumatologic and hematologic domains, presenting with a broad spectrum of clinical sequelae including cutaneous disease (neutrophilic dermatoses, vasculitic lesions), constitutional symptoms (fever, fatigue, weight loss), musculoskeletal involvement (chondritis, arthritis), ocular inflammation (uveitis, scleritis), pulmonary disease (alveolitis), venous thromboembolism, and progressive bone marrow failure with MDS overlap.

7.3 Current Treatment Landscape

Show code
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
import numpy as np

# ── Palette ──
NAVY, GOLD, TEAL, CORAL, SLATE = '#1A2744', '#CFB991', '#2D8A8A', '#C75B4A', '#6B7280'
LIGHT_GOLD, WHITE, GREEN = '#F5EDD8', '#FFFFFF', '#2D8A5E'

plt.rcParams.update({
    'font.family': 'sans-serif',
    'font.size': 10,
    'axes.titlesize': 13,
    'axes.labelsize': 11,
    'figure.facecolor': WHITE,
    'axes.facecolor': WHITE,
    'axes.edgecolor': '#CCCCCC',
})

treatments = [
    'Glucocorticoids', 'JAK Inhibitors', 'Anti-IL6',
    'Anti-IL1', 'Anti-TNF', 'HMA\n(Azacitidine)',
    'SIR9900\n(RIPK1i)'
]
anti_inflam    = [4.5, 3.5, 3.0, 2.0, 1.5, 2.0, 4.5]
disease_mod    = [1.0, 2.0, 1.0, 1.0, 0.5, 3.5, 4.0]
tolerability   = [1.5, 2.5, 3.5, 3.0, 3.0, 2.0, 4.0]
mechanism_spec = [0.5, 2.5, 2.0, 2.0, 1.5, 2.5, 5.0]

fig, ax = plt.subplots(figsize=(10, 5.5))
x = np.arange(len(treatments))
w = 0.18

ax.bar(x - 1.5*w, anti_inflam,    w, color=NAVY,  alpha=0.85, label='Anti-inflammatory Efficacy')
ax.bar(x - 0.5*w, disease_mod,    w, color=TEAL,  alpha=0.85, label='Disease Modification Potential')
ax.bar(x + 0.5*w, tolerability,   w, color=GOLD,  alpha=0.85, label='Tolerability Profile')
ax.bar(x + 1.5*w, mechanism_spec, w, color=CORAL, alpha=0.85, label='Mechanism Specificity')

ax.axvspan(5.6, 6.4, color=LIGHT_GOLD, alpha=0.4, zorder=0)
ax.set_xticks(x)
ax.set_xticklabels(treatments, fontsize=9)
ax.set_ylabel('Comparative Score (0–5)', fontweight='bold')
ax.set_title('VEXAS Treatment Landscape: Multi-Dimensional Comparison',
             fontweight='bold', color=NAVY, fontsize=13)
ax.set_ylim(0, 5.8)
(0.0, 5.8)
Show code
ax.legend(ncol=2, frameon=True, facecolor=WHITE, edgecolor='#CCCCCC',
          loc='upper center', fontsize=8.5, bbox_to_anchor=(0.5, 1.0))
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()
Figure 7.1: Comparative assessment of current VEXAS treatment options across four clinically relevant dimensions. Scores are illustrative and based on published literature. SIR9900 (highlighted) represents a first-in-class mechanism-targeted approach.
ImportantUnmet Need

There are no FDA-approved therapies for VEXAS syndrome. Current standard of care relies on chronic glucocorticoids with significant toxicity, treatment resistance, and flare recurrence. SIR9900 represents the first mechanism-targeted therapy designed to address the proximal molecular driver of VEXAS-associated inflammation.


8 Scientific Rationale: RIPK1 in VEXAS

8.1 The RIPK1-Mediated Cell Death Axis

Recent publications have established RIPK1 kinase activity as a central driver of VEXAS autoinflammation:

  1. Narendra et al. (Nature 2025): Demonstrated that UBA1 mutations drive RIPK1-dependent inflammatory cell death through two independent mechanisms — macrophage-driven inflammation (RIPK3-Caspase-8 pathway) and HSPC dysfunction (unfolded protein response)

  2. Kosmider et al. (Nat Commun 2024): Showed VEXAS is characterized by inflammasome activation and monocyte dysregulation, with LDH levels correlating with RIPK1/RIPK3 activity

  3. Breillat et al. (bioRxiv 2025): Confirmed that UBA1 mutations drive RIPK1-mediated cell death and monocyte dysfunction

The pathological cascade proceeds as follows:

UBA1 Mutation → Defective ubiquitination → RIPK1 hyperactivation → Aberrant caspase-8 apoptosis & RIPK3-MLKL necroptosis → DAMP/HMGB1 release → Feed-forward myeloid-biased inflammation

8.2 Preclinical Evidence: In Vivo Survival Rescue

Show code
fig, ax = plt.subplots(figsize=(8, 5))

hours = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
surv_vehicle = np.array([100, 100, 100, 90, 70, 50, 30, 10, 0, 0, 0, 0, 0])
surv_sir9900 = np.array([100, 100, 100, 100, 100, 100, 100, 100, 95, 90, 90, 90, 90])
surv_wt      = np.array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100])

ax.step(hours, surv_wt,      where='post', color=SLATE, lw=2,   ls='--', label='Wild-Type + Vehicle')
ax.step(hours, surv_sir9900, where='post', color=TEAL,  lw=2.5,          label='VEXAS + SIR9900 (100 mg/kg)')
ax.step(hours, surv_vehicle, where='post', color=CORAL, lw=2.5,          label='VEXAS + Vehicle')

ax.fill_between(hours, surv_vehicle, step='post', alpha=0.08, color=CORAL)
ax.fill_between(hours, surv_sir9900, step='post', alpha=0.08, color=TEAL)

ax.annotate('100% mortality\nby 9 hours', xy=(8.5, 2), fontsize=9,
            color=CORAL, fontweight='bold', ha='center')
ax.annotate('90% survival\nwith SIR9900', xy=(11, 90), fontsize=9,
            color=TEAL, fontweight='bold', ha='center',
            xytext=(9.5, 72), arrowprops=dict(arrowstyle='->', color=TEAL, lw=1.2))

ax.set_xlabel('Hours Post TNFα Challenge', fontweight='bold', fontsize=12)
ax.set_ylabel('Survival (%)', fontweight='bold', fontsize=12)
ax.set_title('Uba1-Conditional KO VEXAS Mouse Model\nTNFα-Induced Lethality Rescue by SIR9900',
             fontweight='bold', color=NAVY, fontsize=13)
ax.set_xlim(-0.2, 12.5)
(-0.2, 12.5)
Show code
ax.set_ylim(-2, 105)
(-2.0, 105.0)
Show code
ax.legend(frameon=True, facecolor=WHITE, edgecolor='#CCCCCC', loc='center left', fontsize=9)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.tight_layout()
plt.show()
Figure 8.1: Kaplan-Meier–style survival curves from the Uba1-conditional knockout VEXAS mouse model challenged with intravenous TNFα. SIR9900 pretreatment (100 mg/kg oral) rescued VEXAS mice from TNFα-induced lethality (90% survival vs. 0% in vehicle-treated VEXAS mice). Wild-type controls showed 100% survival. Data adapted from Sironax nonclinical studies.

9 SIR9900: Pharmacological Profile

9.1 Target Engagement & Pharmacokinetics

SIR9900 demonstrated robust pharmacodynamic activity in the first-in-human study (SIR9900-AU-101), achieving approximately 90% peripheral target engagement (pRIPK1 reduction in PBMCs) at 3 hours post-dose across both single and multiple dosing regimens.

Show code
library(ggplot2)
library(dplyr)
library(tidyr)
library(patchwork)
library(scales)

# ── Color palette ──
navy  <- "#1A2744"
gold  <- "#CFB991"
teal  <- "#2D8A8A"
coral <- "#C75B4A"
slate <- "#6B7280"
light_gold <- "#F5EDD8"
green_col  <- "#2D8A5E"

theme_sivex <- function(base_size = 11) {
  theme_minimal(base_size = base_size, base_family = "sans") +
    theme(
      plot.background  = element_rect(fill = "white", color = NA),
      panel.background = element_rect(fill = "white", color = NA),
      panel.grid.major = element_line(color = "#EEEEEE", linewidth = 0.4),
      panel.grid.minor = element_blank(),
      plot.title       = element_text(face = "bold", color = navy, size = 13,
                                      margin = margin(b = 6)),
      plot.subtitle    = element_text(color = slate, size = 9,
                                      margin = margin(b = 10)),
      axis.title       = element_text(face = "bold", size = 10),
      axis.text        = element_text(color = "#4A4A4A"),
      legend.position  = "bottom",
      legend.title     = element_text(face = "bold", size = 9),
      legend.text      = element_text(size = 8),
      plot.margin      = margin(10, 10, 10, 10)
    )
}

# ── Panel A: Target Engagement Bar Chart ──
te_data <- tibble(
  dose   = factor(c(3, 10, 30, 60), levels = c(3, 10, 30, 60)),
  single = c(35, 65, 90, 95),
  multi  = c(40, 72, 92, 97)
) |>
  pivot_longer(cols = c(single, multi),
               names_to = "regimen", values_to = "engagement") |>
  mutate(regimen = factor(regimen,
                          levels = c("single", "multi"),
                          labels = c("Single Dose (3h)", "Multiple Dose Day 10 (3h)")))

p1 <- ggplot(te_data, aes(x = dose, y = engagement, fill = regimen)) +
  geom_col(position = position_dodge(width = 0.7), width = 0.6, alpha = 0.85) +
  geom_text(aes(label = paste0(engagement, "%")),
            position = position_dodge(width = 0.7), vjust = -0.5,
            size = 3, fontface = "bold", color = navy) +
  geom_hline(yintercept = 90, linetype = "dashed", color = gold, linewidth = 1) +
  annotate("text", x = 4.4, y = 92, label = "90% TE threshold",
           color = gold, fontface = "bold", size = 3, hjust = 0.5) +
  scale_fill_manual(values = c(navy, teal)) +
  scale_y_continuous(limits = c(0, 110), breaks = seq(0, 100, 25)) +
  labs(
    title    = "A. Peripheral Target Engagement",
    subtitle = "pRIPK1 reduction in PBMCs (SIR9900-AU-101)",
    x = "SIR9900 Dose (mg)",
    y = "Target Engagement (%)",
    fill = NULL
  ) +
  theme_sivex() +
  theme(legend.position = c(0.3, 0.9),
        legend.background = element_rect(fill = "white", color = "#CCCCCC"))

# ── Panel B: Simulated PK Profile ──
pk_data <- expand_grid(
  dose = c(10, 20, 30),
  time = seq(0, 48, by = 0.25)
) |>
  mutate(
    ka   = 0.8,
    ke   = 0.019,
    Cmax = dose / 30 * 450,
    conc = Cmax * ka / (ka - ke) * (exp(-ke * time) - exp(-ka * time)),
    dose_label = paste0(dose, " mg")
  )

p2 <- ggplot(pk_data, aes(x = time, y = conc, color = dose_label)) +
  geom_line(linewidth = 1.2) +
  annotate("rect", xmin = 0, xmax = 48, ymin = 100, ymax = 500,
           fill = green_col, alpha = 0.06) +
  annotate("text", x = 44, y = 300, label = "Therapeutic\nrange",
           color = green_col, fontface = "italic", size = 3, hjust = 1) +
  annotate("text", x = 35, y = 45, label = "t½ ≈ 32–38h",
           color = slate, fontface = "italic", size = 3) +
  annotate("curve", x = 10, y = 430, xend = 3.5, yend = 405,
           curvature = -0.2, arrow = arrow(length = unit(0.15, "cm")),
           color = navy) +
  annotate("text", x = 11, y = 440, label = "Tmax ≈ 3–4h",
           color = navy, fontface = "bold", size = 3) +
  scale_color_manual(values = c("10 mg" = slate, "20 mg" = teal, "30 mg" = navy)) +
  scale_x_continuous(breaks = seq(0, 48, 8)) +
  labs(
    title    = "B. Simulated PK Profile (Single Dose)",
    subtitle = "One-compartment oral model based on FIH data",
    x = "Time Post-Dose (hours)",
    y = "Plasma Concentration (ng/mL)",
    color = "Dose"
  ) +
  theme_sivex() +
  theme(legend.position = c(0.85, 0.85),
        legend.background = element_rect(fill = "white", color = "#CCCCCC"))

p1 + p2 + plot_annotation(
  theme = theme(plot.background = element_rect(fill = "white", color = NA))
)
Figure 9.1: Panel A: Peripheral target engagement (pRIPK1 reduction) by SIR9900 dose level in healthy volunteers (SIR9900-AU-101). The 30 mg dose achieves ≥90% target engagement. Panel B: Simulated single-dose pharmacokinetic profiles showing dose-proportional exposure with Tmax ~3–4 hours and t½ ~32–38 hours.

9.2 Safety Margin Analysis

SIR9900 demonstrated a favorable safety profile across nonclinical toxicology studies. The primary target organ was the testes (seminiferous tubule degeneration in rats at high doses), which was reversible upon 13 weeks of cessation.

Show code
safety_data <- tibble(
  category = c("Rat NOAEL\n(30 mg/kg/day, 26-wk)",
               "Dog NOAEL\n(150 mg/kg/day, 39-wk)",
               "Rat HED\n(4.84 mg/kg/day)",
               "Human 30 mg\n(predicted)"),
  auc      = c(110459, 450000, 110459, 8746),
  color    = c(coral, coral, teal, navy),
  type     = c("Nonclinical", "Nonclinical", "Translation", "Clinical")
) |>
  mutate(category = factor(category, levels = rev(category)))

ggplot(safety_data, aes(x = auc, y = category, fill = type)) +
  geom_col(width = 0.55, alpha = 0.85) +
  geom_text(aes(label = scales::comma(auc)),
            hjust = -0.1, fontface = "bold", size = 3.5, color = navy) +
  annotate("label", x = 300000, y = 0.7,
           label = "Safety Margin: >12.6×\n(Rat NOAEL ÷ Human 30 mg)",
           fill = light_gold, color = navy, fontface = "bold",
           size = 3.5, label.size = 0.8, label.r = unit(0.3, "lines")) +
  scale_fill_manual(values = c("Nonclinical" = coral, "Translation" = teal, "Clinical" = navy)) +
  scale_x_continuous(labels = scales::comma, limits = c(0, 530000),
                     expand = expansion(mult = c(0, 0.05))) +
  labs(
    title    = "Exposure-Based Safety Margin Analysis",
    subtitle = "AUC comparison across species and dose levels",
    x = "AUC (hr·ng/mL)",
    y = NULL,
    fill = "Category"
  ) +
  theme_sivex() +
  theme(panel.grid.major.y = element_blank(),
        legend.position = "bottom")
Figure 9.2: Exposure-based safety margin analysis comparing AUC values across species. The predicted human exposure at the highest planned dose (30 mg) provides a >12.6-fold safety margin relative to the rat NOAEL. NOAEL = no-observed-adverse-effect level; HED = human equivalent dose.

10 Study Design

10.1 Two-Part Adaptive Design

The SIVEX study employs a two-part adaptive design to efficiently identify the optimal dose and confirm efficacy:

Show code
from matplotlib.patches import FancyBboxPatch

fig, ax = plt.subplots(figsize=(10, 5.5))
ax.set_xlim(0, 10)
(0.0, 10.0)
Show code
ax.set_ylim(0, 6)
(0.0, 6.0)
Show code
ax.axis('off')
(np.float64(0.0), np.float64(10.0), np.float64(0.0), np.float64(6.0))
Show code
ax.text(5, 5.7, 'SIVEX Study Schema: Two-Part Adaptive Design',
        fontsize=14, fontweight='bold', color=NAVY, ha='center', va='top')

# ── Part A ──
ax.text(0.3, 5.05, 'PART A: Dose-Ranging (N = 18–30)', fontsize=11,
        fontweight='bold', color=GOLD, va='center')

phases_a = [
    (0.3, 1.4, 'Screening\n4 wk', SLATE),
    (1.9, 2.8, 'Double-Blind\nUp to 24 wk', NAVY),
    (4.9, 2.8, 'Open-Label\n24 wk', TEAL),
    (7.9, 1.4, 'Follow-Up\n4 wk', SLATE),
]
y_a = 4.1
for x, w, label, color in phases_a:
    box = FancyBboxPatch((x, y_a), w, 0.75, boxstyle="round,pad=0.05",
                         facecolor=color, edgecolor='none', alpha=0.85)
    ax.add_patch(box)
    ax.text(x + w/2, y_a + 0.375, label, ha='center', va='center',
            fontsize=8, color='white', fontweight='bold')

arms = ['SIR9900 20 mg (N=10)', 'SIR9900 30 mg (N=10)', 'Placebo (N=10)']
for i, arm in enumerate(arms):
    yy = 3.55 - i * 0.28
    ax.text(2.3, yy, f'Arm {i+1}: {arm}', fontsize=7.5, color=NAVY)
    ax.plot([1.9, 2.2], [yy, yy], '-', color=GOLD, lw=1.5)

ax.annotate('IDMC Dose\nSelection', xy=(4.7, 4.1), xytext=(4.7, 3.15),
            fontsize=8, color=CORAL, fontweight='bold', ha='center',
            arrowprops=dict(arrowstyle='->', color=CORAL, lw=1.5))

# ── Part B ──
ax.text(0.3, 2.3, 'PART B: Efficacy & Safety (N = 80)', fontsize=11,
        fontweight='bold', color=GOLD, va='center')

y_b = 1.35
for x, w, label, color in phases_a:
    if 'Up to' in label:
        label = 'Double-Blind\n24 wk'
    box = FancyBboxPatch((x, y_b), w, 0.75, boxstyle="round,pad=0.05",
                         facecolor=color, edgecolor='none', alpha=0.85)
    ax.add_patch(box)
    ax.text(x + w/2, y_b + 0.375, label, ha='center', va='center',
            fontsize=8, color='white', fontweight='bold')

arms_b = ['SIR9900 selected dose (N=40)', 'Placebo (N=40)']
for i, arm in enumerate(arms_b):
    yy = 0.85 - i * 0.28
    ax.text(2.3, yy, f'Arm {i+1}: {arm}', fontsize=7.5, color=NAVY)
    ax.plot([1.9, 2.2], [yy, yy], '-', color=GOLD, lw=1.5)

for y_start in [y_a + 0.375, y_b + 0.375]:
    ax.annotate('', xy=(4.9, y_start), xytext=(4.7, y_start),
                arrowprops=dict(arrowstyle='->', color=GOLD, lw=1.2))

ax.text(4.8, 0.12, '↑ Flare after Wk 12 → transition to open-label',
        fontsize=7.5, color=CORAL, style='italic', ha='center')

bbox_props = dict(boxstyle="round,pad=0.3", facecolor=LIGHT_GOLD, edgecolor=GOLD, lw=1.5)
ax.text(8.6, 0.55, 'Primary Endpoint:\nOCR at Week 24', fontsize=8.5,
        fontweight='bold', color=NAVY, ha='center', va='center', bbox=bbox_props)

plt.tight_layout()
plt.show()
Figure 10.1: SIVEX study schema illustrating the two-part adaptive design. Part A (dose-ranging) evaluates two dose levels of SIR9900 versus placebo with IDMC-guided dose selection. Part B (efficacy confirmation) enrolls new participants randomized 1:1 to the selected dose versus placebo. Both parts include mandatory glucocorticoid taper, 24-week open-label extension, and 4-week follow-up.

10.2 Glucocorticoid Taper Strategy

All participants undergo a mandatory glucocorticoid taper targeting ≤10 mg/day prednisone equivalent. The taper is integral to the study design — efficacy is measured by the ability to maintain flare-free status while reducing GC exposure.

Show code
taper_data <- tibble(
  week = rep(1:24, 3),
  dose = c(
    # Entry 45 mg
    45, 40, 35, 30, 25, 20, 17.5, 17.5, 15, 15, 12.5, 12.5,
    rep(10, 12),
    # Entry 30 mg
    30, 25, 20, 17.5, 17.5, 15, 15, 12.5, 12.5,
    rep(10, 15),
    # Entry 15 mg
    15, 15, 12.5, 12.5, rep(10, 20)
  ),
  entry = rep(c("Entry: 45 mg/day", "Entry: 30 mg/day", "Entry: 15 mg/day"), each = 24)
) |>
  mutate(entry = factor(entry, levels = c("Entry: 45 mg/day",
                                           "Entry: 30 mg/day",
                                           "Entry: 15 mg/day")))

ggplot(taper_data, aes(x = week, y = dose, color = entry)) +
  annotate("rect", xmin = 0.5, xmax = 24.5, ymin = 0, ymax = 10,
           fill = green_col, alpha = 0.06) +
  geom_hline(yintercept = 10, linetype = "dashed", color = green_col,
             linewidth = 0.8, alpha = 0.6) +
  geom_vline(xintercept = 13, linetype = "dotted", color = coral, linewidth = 0.8) +
  geom_vline(xintercept = 16, linetype = "dotted", color = coral, linewidth = 1.2) +
  geom_line(linewidth = 1.3) +
  geom_point(size = 2.5, alpha = 0.8) +
  annotate("text", x = 24.7, y = 11, label = "≤10 mg\ntarget",
           color = green_col, fontface = "bold", size = 3.2, hjust = 0) +
  annotate("text", x = 13.3, y = 44, label = "Wk 13 D1\ntarget",
           color = coral, fontface = "italic", size = 3) +
  annotate("text", x = 16.3, y = 44, label = "Wk 16\ndeadline",
           color = coral, fontface = "bold", size = 3) +
  annotate("label", x = 7, y = 48, label = "Double-Blind Phase",
           fill = "#F0F0F0", color = slate, size = 3, label.size = 0) +
  scale_color_manual(values = c(navy, teal, gold)) +
  scale_x_continuous(breaks = seq(1, 24, 2), limits = c(0.5, 25.5)) +
  scale_y_continuous(breaks = seq(0, 50, 10), limits = c(0, 52)) +
  labs(
    title    = "Glucocorticoid Taper Schedule by Entry Dose",
    subtitle = "Mandatory taper to ≤10 mg/day; investigator-adjustable rate",
    x = "Study Week",
    y = "Prednisone Dose (mg/day)",
    color = NULL
  ) +
  theme_sivex() +
  theme(
    legend.position = c(0.82, 0.88),
    legend.background = element_rect(fill = "white", color = "#CCCCCC",
                                     linewidth = 0.3)
  )
Figure 10.2: Glucocorticoid taper trajectories by entry dose level. All participants must achieve ≤10 mg/day by Week 13 Day 1 (target) or Week 16 at latest. Taper may pause for intercurrent events or flares at the investigator’s discretion. The green-shaded region indicates the ≤10 mg/day target zone.

10.3 Overall Clinical Response Definition

The primary endpoint is the proportion of participants achieving Overall Clinical Response (OCR) by Week 24, defined as achieving clinical response or better:

Overall Clinical Response Criteria (Beck et al. 2025)
OCR? Category Flare-Free GC Dose CRP
YES Stringent Clinical/Biochemical ≥8 weeks ≤5 mg/day ≤10 mg/L
YES Clinical/Biochemical ≥8 weeks ≤10 mg/day ≤10 mg/L or ≥50%↓ to ≤20
YES Clinical Response ≥8 weeks ≤10 mg/day —
NO Partial Clinical ≥8 weeks ≥50% reduction —
NO Stable Disease ≥8 weeks ≤baseline dose —
NO Nonresponse Does not meet above criteria

A flare is defined per the consensus definition (Weeks et al. 2025) as an active inflammatory manifestation of VEXAS for which GC escalation is indicated, fulfilling ≥1 criterion from Categories A (recurrence), B (new biopsy-proven sign), or C (IAC-adjudicated manifestation).


11 Statistical Considerations

11.1 Power Analysis

The Part B efficacy analysis assumes 40% OCR in the SIR9900 arm versus 10% in placebo, providing approximately 90% power to detect this difference using a CMH test stratified by baseline GC dose at a two-sided α = 0.05.

Show code
# ── Panel A: Power vs Sample Size ──
power_calc <- function(n, p_active, p_placebo = 0.10, alpha = 0.05) {
  p_bar  <- (p_active + p_placebo) / 2
  se_null <- sqrt(2 * p_bar * (1 - p_bar) / n)
  se_alt  <- sqrt(p_active * (1 - p_active) / n + p_placebo * (1 - p_placebo) / n)
  z_alpha <- qnorm(1 - alpha / 2)
  z <- (p_active - p_placebo - z_alpha * se_null) / se_alt
  pnorm(z)
}

power_data <- expand_grid(
  n = 10:63,
  p_active = c(0.30, 0.35, 0.40, 0.45, 0.50)
) |>
  mutate(
    power  = mapply(power_calc, n, p_active),
    active_label = paste0(p_active * 100, "% active")
  )

p_a <- ggplot(power_data, aes(x = n, y = power, color = active_label)) +
  geom_line(linewidth = 1.2) +
  geom_hline(yintercept = 0.80, linetype = "dashed", color = "#CCCCCC") +
  geom_hline(yintercept = 0.90, linetype = "dashed", color = "#CCCCCC") +
  geom_vline(xintercept = 40, linetype = "dotted", color = coral, linewidth = 1) +
  annotate("text", x = 41.5, y = 0.15, label = "N=40/arm\n(planned)",
           color = coral, fontface = "italic", size = 3) +
  annotate("text", x = 62, y = 0.82, label = "80%", color = slate, size = 2.8) +
  annotate("text", x = 62, y = 0.92, label = "90%", color = slate, size = 2.8) +
  scale_color_manual(values = c(slate, teal, navy, coral, gold)) +
  scale_y_continuous(limits = c(0, 1.02), breaks = seq(0, 1, 0.2)) +
  labs(
    title    = "A. Power vs. Sample Size",
    subtitle = "Placebo OCR = 10%, two-sided α = 0.05",
    x = "Sample Size per Arm",
    y = "Statistical Power",
    color = "Active OCR Rate"
  ) +
  theme_sivex() +
  theme(legend.position = c(0.75, 0.3),
        legend.background = element_rect(fill = "white", color = "#CCCCCC"))

# ── Panel B: Power Sensitivity Heatmap ──
sensitivity_data <- expand_grid(
  p_placebo = seq(0.05, 0.24, 0.01),
  p_active  = seq(0.25, 0.58, 0.01)
) |>
  filter(p_active > p_placebo) |>
  mutate(power = mapply(power_calc, n = 40, p_active, p_placebo))

p_b <- ggplot(sensitivity_data,
              aes(x = p_placebo * 100, y = p_active * 100, fill = power)) +
  geom_tile() +
  geom_contour(aes(z = power), breaks = 0.80,
               color = navy, linewidth = 1, linetype = "dashed") +
  geom_contour(aes(z = power), breaks = 0.90,
               color = navy, linewidth = 1.5) +
  annotate("point", x = 10, y = 40, shape = 21, size = 4,
           fill = coral, color = "white", stroke = 1.5) +
  annotate("text", x = 12, y = 40, label = "Protocol\nassumption",
           color = coral, fontface = "bold", size = 3, hjust = 0) +
  scale_fill_gradientn(
    colors = c("#D73027", "#FC8D59", "#FEE08B", "#D9EF8B", "#91CF60", "#1A9850"),
    limits = c(0, 1), breaks = seq(0, 1, 0.2),
    name = "Power"
  ) +
  labs(
    title    = "B. Power Sensitivity (N=40/arm)",
    subtitle = "90% (solid) & 80% (dashed) contours",
    x = "Placebo OCR Rate (%)",
    y = "Active OCR Rate (%)"
  ) +
  theme_sivex() +
  theme(legend.position = "right")

p_a + p_b + plot_annotation(
  theme = theme(plot.background = element_rect(fill = "white", color = NA))
)
Figure 11.1: Panel A: Statistical power as a function of sample size per arm for varying active OCR rate assumptions (placebo fixed at 10%). The planned N=40/arm achieves ~90% power at the protocol assumption of 40% active OCR. Panel B: Power sensitivity heatmap showing how power varies across combinations of placebo and active OCR rates at the planned sample size. The red dot marks the protocol assumption; solid and dashed contour lines show 90% and 80% power boundaries.

11.2 Key Analysis Features

TipStatistical Methodology Summary
  • Primary analysis: CMH test for OCR proportion stratified by baseline GC dose (15–25 mg vs. >25–45 mg); Full Analysis Set (ITT principle)
  • Sensitivity analysis: Logistic regression with treatment, baseline GC dose, and interaction term
  • Tipping point analysis: Evaluates robustness by incrementally reversing imputed responses
  • Multiplicity: Gate-keeping method for 7 key secondary endpoints (tested sequentially at α=0.05)
  • Subgroups: Gender, age group, prior JAK inhibitor use, baseline GC dose stratum
  • Intercurrent events: Lost to follow-up, AE withdrawal, lack of efficacy → imputed as nonresponse

11.2.1 Key Secondary Endpoints (Gate-Keeping Hierarchy)

  1. Proportions of best response achieved (stringent clinical/biochemical → nonresponse)
  2. Number of flare-free days with GC ≤10 mg/day
  3. Cumulative glucocorticoid dose (average % of daily dose relative to baseline)
  4. PROMIS Physical Function 4a (T-score change from baseline)
  5. PROMIS Fatigue 4a (T-score change from baseline)
  6. Hematologic Improvement–Erythroid (HI-E) in patients with baseline Hgb <10 g/dL
  7. Hematologic Improvement–Platelets (HI-P) in patients with baseline PLT <100×10⁹/L

12 Projected Timeline

Show code
fig, ax = plt.subplots(figsize=(10, 4))

phases = [
    ('Regulatory / Site Activation', 2026.25, 2027.0,  SLATE),
    ('Part A: Screening',            2026.75, 2027.0,  LIGHT_GOLD),
    ('Part A: Enrollment (N ≤ 30)',   2027.0,  2027.75, NAVY),
    ('Part A: Treatment (48 wk)',     2027.0,  2028.25, TEAL),
    ('IDMC Dose Selection',           2028.0,  2028.12, CORAL),
    ('Part B: Enrollment (N = 80)',   2028.0,  2028.5,  NAVY),
    ('Part B: Treatment (48 wk)',     2028.0,  2029.25, TEAL),
    ('Part B: Follow-up & Close',     2029.25, 2029.5,  SLATE),
]

for i, (name, start, end, color) in enumerate(phases):
    width = max(end - start, 0.1)
    ax.barh(i, width, left=start, height=0.55, color=color, alpha=0.85, edgecolor='none')
    txt_color = 'white' if color in [NAVY, TEAL, CORAL, SLATE] else NAVY
    if width > 0.15:
        ax.text(start + width/2, i, name, ha='center', va='center',
                fontsize=7.5, fontweight='bold', color=txt_color)
    else:
        ax.text(end + 0.05, i, name, ha='left', va='center',
                fontsize=7.5, fontweight='bold', color=CORAL)

ax.set_yticks([])
[]
Show code
ax.set_xlabel('Year', fontweight='bold', fontsize=11)
ax.set_title('Projected Study Timeline', fontweight='bold', color=NAVY, fontsize=13)
ax.set_xlim(2026, 2030)
(2026.0, 2030.0)
Show code
quarters = np.arange(2026, 2030.1, 0.25)
labels = []
for q in quarters:
    yr = int(q)
    qn = int((q % 1) * 4 + 1)
    labels.append(f"Q{qn}\n{yr}" if qn == 1 else f"Q{qn}")
ax.set_xticks(quarters)
ax.set_xticklabels(labels, fontsize=7)
ax.invert_yaxis()
for sp in ['top', 'right', 'left']:
    ax.spines[sp].set_visible(False)

plt.tight_layout()
plt.show()
Figure 12.1: Projected study timeline showing key milestones from regulatory activation through study completion. Part A enrollment targets Q1 2027 with IDMC dose selection by Q1 2028. Part B enrollment completes by Q3 2028, with final study completion anticipated in Q3 2029.

13 Eligibility Criteria Summary

13.1 Key Inclusion Criteria

  • Age ≥18 years, male or female
  • Documented pathogenic UBA1 mutation at M41 or splice site (c.118-1, c.118-2) by NGS, ddPCR, or Sanger sequencing
  • Current or documented organ involvement within 6 months (cutaneous, vascular, musculoskeletal, ocular, periorbital, genitourinary, or pulmonary)
  • Stable prednisone/prednisolone 15–45 mg/day for ≥10 days prior to enrollment
  • Karnofsky Performance Status ≥50%
  • Adequate organ function (AST/ALT ≤3× ULN, CrCl ≥30, ANC ≥500, PLT ≥25×10⁹/L, blasts <5%)

13.2 Key Exclusion Criteria

  • Prior allo-HSCT or solid organ transplant

  • 1 ICU admission for VEXAS flare in prior 6 months

  • ≥9 units RBC transfusion in 90 days prior

  • Known concurrent MDS requiring treatment or IPSS-R high/very high risk

  • HMA exposure within 6 months or >4 prior HMA cycles

  • Non-GC anti-inflammatory agents within protocol-defined washout periods (14–180 days by agent)

  • Strong CYP3A/CYP2C8 inhibitors/inducers or CYP1A2 substrates

  • Active hepatitis, uncontrolled HIV, positive QuantiFERON


14 Safety Monitoring & Oversight

14.1 Independent Committees

IDMC (Independent Data Monitoring Committee): Unblinded committee that reviews cumulative safety and efficacy data, performs dose selection in Part A, and monitors enrollment and protocol compliance.

IAC (Independent Adjudication Committee): Blinded panel of ≥3 VEXAS experts who adjudicate all suspected flares. In Part A, the IAC reviews Category C events only; in Part B, all categories (A, B, C) are adjudicated.

14.2 Adverse Event Collection

  • TEAEs: Graded per CTCAE v5.0; coded by MedDRA v28.1
  • Collection window: ICF signing through 28 days post last dose
  • Related SAEs: Collected up to 42 days (11 half-lives)
  • SAE reporting: Within 24 hours; SUSARs per regulatory timelines

15 Summary

NoteKey Takeaways
  1. Strong scientific rationale: RIPK1 is validated as a central mediator of VEXAS autoinflammation by multiple independent groups; SIR9900 rescues survival in preclinical VEXAS models
  2. First-in-class opportunity: SIR9900 is the first RIPK1 inhibitor studied in VEXAS, targeting the proximal molecular mechanism of disease
  3. Robust clinical pharmacology: ~90% target engagement, favorable safety in healthy volunteers, dose-proportional PK, and >12× safety margin at the planned dose
  4. Rigorous Phase II design: Randomized, double-blind, placebo-controlled with adaptive dose selection, independent adjudication, and 90% statistical power
  5. Critical unmet need: No FDA-approved therapy exists; chronic GC dependence remains the inadequate standard of care with progressive morbidity and ~37% 5-year mortality

References

Gurnari, Carmelo, Linda Koster, Laurien Baaij, et al. 2024. “Allogeneic Hematopoietic Cell Transplantation for VEXAS Syndrome: Results of a Multicenter Study of the EBMT.” Blood Advances 8 (6): 1444–48. https://doi.org/10.1182/bloodadvances.2023012478.
Jachiet, Vincent, Olivier Kosmider, Maxime Beydon, et al. 2025. “Efficacy and Safety of Azacitidine for VEXAS Syndrome: A Large-Scale Retrospective Study from the FRENVEX Group.” Blood Journal, ahead of print, May 15. https://doi.org/10.1182/blood.2024028133.
Knuth, Donald E. 1984. “Literate Programming.” Comput. J. (USA) 27 (2): 97–111. https://doi.org/10.1093/comjnl/27.2.97.
  • Beck DB, et al. Somatic Mutations in UBA1 and Severe Adult-Onset Autoinflammatory Disease. N Engl J Med. 2020;383(27):2628-2638.
  • Beck DB, et al. Estimated Prevalence and Clinical Manifestations of UBA1 Variants Associated With VEXAS Syndrome. JAMA. 2023;329(4):318-324.
  • Narendra VK, et al. Independent mechanisms of inflammation and myeloid bias in VEXAS syndrome. Nature. 2025. doi:10.1038/s41586-025-09815-0.
  • Kosmider O, et al. VEXAS syndrome is characterized by inflammasome activation and monocyte dysregulation. Nat Commun. 2024;15(1):910.
  • Breillat P, et al. UBA1 Mutations Drive RIPK1-Mediated Cell Death and Monocyte Dysfunction in VEXAS Syndrome. bioRxiv. 2025.
  • Georgin-Lavialle S, et al. Further characterization of clinical and laboratory features in VEXAS syndrome. Br J Dermatol. 2022;186(3):564-574.
  • Weeks LD, et al. Development of a Consensus Definition of VEXAS Flare for Use in Clinical Research. ACR Convergence 2025. Poster POS1124.
  • Mekinian AM, et al. ACR Guidance Statement for Diagnosis and Management of VEXAS. Arthritis Rheumatol. 2025.

CONFIDENTIAL — This document contains proprietary information from Sironax USA, Inc. (SIR9900-GLB-202, Version 2.0, January 09, 2026). For internal discussion only.

Report generated: 2026-08-19 19:45:59.315956
R version: R version 4.6.1 (2026-06-24)
ggplot2 version: 4.0.3
Python version: 3.14.0
matplotlib version: 3.10.8